﻿// 变量、作用域、内存问题
// 函数参数--局部变量
function setName(obj) {
    obj.name = "nick";
}

var person = new Object();
setName(person);
alert(person.name); //nick

function setNames(obj) {
    obj.name = "jack";
    obj = new Object();
    obj.name = "David";
}

var persons = new Object();
setNames(persons);
alert(persons.name); //jack

//检测类型
//基本类型 typeof
var s = "str";
var i = 12;
var b = true;
var u;
var n = null;
var o = new Object();

alert(typeof s); //string
alert(typeof i); //number
alert(typeof b); //boolean
alert(typeof u); //undefined
alert(typeof n); //object
alert(typeof o); //object
// 引用类型 instanceof ,检测基本类型的值，始终返回false
var colors = new Array();
var pattern = /at/g;
alert(person instanceof Object); //true;
alert(colors instanceof Array); //true;
alert(pattern instanceof RegExp); //true;
// 延长作用域链
//try-catch语句的catch块
//with语句

function buildUrl() {
    var qs = "?debug=true";
    with (location){
        var url = href + qs;
    }

    return url;
}

// js没有块级作用域
// 执行环境（作用域）：分为全局执行环境和函数执行环境
// 函数的局部环境不仅有权访问函数作用域中的变量和函数，而且有权访问其包含（父）环境，乃至全局环境
// 全局环境只能访问在全局环境中定义的变量和函数，而不能直接访问局部环境中的任何数据
// 垃圾回收："标记清除"(目前主流的垃圾收集算法)，"引用计数"

